Load data

# Set working directory
setwd("Z:/Loire_DO")

# Load libraries
library(lubridate)
library(readxl)
library(plotly)
library(tidyverse)

# Load data
df_DO <- readRDS("Headwaters/Data/DO_time_series_wide") %>%
  mutate(DOsat = if_else(DO_temp == 0,
                        0,
                        14.652 - 0.41022 * DO_temp + 0.007991 * 
                          DO_temp^2 - 0.000077774 * DO_temp^3),
         DO_per = DO * 100/ DOsat)

# Get rid of bad data when sensors were buried or when out of water
flood_sites1 <- c("Loise Feurs", "Mare Pont du diable", "Mare aval",
                 "Vizézy amont Bullieux", "Toranche aval", "Mare Azieux")
flood_sites2 <- c("Loise aval Poncins", "Loise Essertine en Donzy")
df_DO <- df_DO %>%
  filter(!(Site %in% flood_sites1 & between(datetime, 
                                            ymd_hm("2019-08-06 16:00"),
                                            ymd_hm("2019-08-29 16:45"))),
         !(Site %in% flood_sites2 & between(datetime, 
                                            ymd_hm("2019-08-06 16:00"),
                                            ymd_hm("2019-08-30 10:30"))),
         !(Site == "Coise aval Montrond" & between(datetime, 
                                                   ymd_hm("2019-08-06 16:00"),
                                                   ymd_hm("2019-09-11 11:30"))),
         !(Site == "Loise amont Doise Salt" & between(datetime, 
                                                   ymd_hm("2019-07-16 00:30"),
                                                   ymd_hm("2019-07-20 20:00"))),
         !(Site == "Loise aval Doise Salt" & between(datetime, 
                                                      ymd_hm("2019-08-06 19:00"),
                                                      ymd_hm("2019-08-30 10:15"))),
         !(Site == "Loise Essertine en Donzy" & between(datetime, 
                                                   ymd_hm("2019-07-20 22:15"),
                                                   ymd_hm("2019-07-23 15:30"))),
         !(Site == "Vizézy amont Bullieux" & between(datetime, 
                                                   ymd_hm("2019-07-08 19:00"),
                                                   ymd_hm("2019-07-16 14:15"))),
         !(Site == "Vizézy amont Bullieux" & between(datetime, 
                                                   ymd_hm("2019-07-24 23:00"),
                                                   ymd_hm("2019-08-29 15:30"))),
         !(Site == "Toranche Pontet" & between(datetime, 
                                               ymd_hm("2019-07-12 19:45"),
                                               ymd_hm("2019-07-21 17:30"))),
         !(Site == "Toranche Pontet" & between(datetime, 
                                               ymd_hm("2019-07-23 22:45"),
                                               ymd_hm("2019-07-29 01:00"))),
         !(Site == "Toranche Pontet" & between(datetime, 
                                               ymd_hm("2019-07-31 03:45"),
                                               ymd_hm("2019-08-06 17:30"))),
         !(Site == "Doise" & between(datetime, 
                                     ymd_hm("2019-07-14 15:00"),
                                     ymd_hm("2019-07-20 17:15"))),
         !(Site == "Doise" & between(datetime, 
                                     ymd_hm("2019-08-03 20:15"),
                                     ymd_hm("2019-08-06 12:30")))
         
         )

# Use threshold of daily temperature and %sat
df_DO_sum <- df_DO %>%
  mutate(date = date(datetime)) %>%
  group_by(Site,date) %>%
  summarize(do_mean = mean(DO_per, na.rm = TRUE),
            do_amp = max(DO_per, na.rm = T) - min(DO_per, na.rm = T),
            wat_t = max(DO_temp, na.rm = T) - min(DO_temp, na.rm = T)) %>%
  mutate(oow = if_else((do_mean > 90 & wat_t > 5) |
                         (do_mean > 90 & do_amp < 2) |
                         (wat_t > 8), "yes", "no"))

# filter days that were out of water
df_DO <- df_DO %>%
  mutate(date = date(datetime)) %>%
  left_join(df_DO_sum) %>%
  filter(oow == "no")

# add a column for west/east
side <- tibble(watershed = c("Coise", "Loise", "Toranche", "Lignon", "Mare"),
               side = c("east", "east", "east", "west", "west"))

# Read in watershed info
ws_meta <- read_excel("Headwaters/Data/Field measurements/sensor_metadata.xlsx",
                      sheet = 7)

df_DO <- left_join(side, select(ws_meta, site = name_site, watershed, area,
                                   site_sensor, site_chem, site_code)) %>%
  right_join(rename(df_DO, site_sensor = Site)) %>%
  # mutate(site_code = str_c(str_sub(site_chem, 1, 3),
  #                          str_pad(round(area), 3, pad = "0"))) %>%
  mutate(side = fct_rev(side)) %>%
  arrange(watershed, area) %>%
  mutate(site_code = fct_inorder(site_code),
         site = fct_inorder(site))

# Plot it
# p_long_met <- ggplot(df_met_l,
#                  aes(x = date,
#                      y = value,
#                      color = site)) +
#   geom_smooth() +
#   theme_bw() +
#   scale_color_viridis_d() +
#   facet_wrap(~name, scales = "free", ncol = 1)
# p_long_met
# 
# p_long_do <- ggplot(df_do,
#                  aes(x = datetime,
#                      y = DO,
#                      color = site)) +
#   geom_smooth() +
#   theme_bw() +
#   scale_color_viridis_d()
# p_long_do
# 
tor <- filter(df_DO, Watershed == "Toranche")
font <- filter(df_DO, Subwatershed == "Fontbonne")
mp <- filter(df_DO, Subwatershed == "Moulin Piquet")
cha <- filter(df_DO, Subwatershed == "Charpassonne")
coi <- filter(df_DO, Subwatershed == "Coise")
pot_conf <- filter(df_DO, site_sensor %in% c("Coise Larajasse", "Le Potensinet", "Coise le Nézel"))
font_conf <- filter(df_DO, site_sensor %in% c("Fontbonne Bessenay", 
                                              "Fontbonne Taillis de Montchervet",
                                              "Ruisseau de Violay"))

ay <- list(
  tickfont = list(color = "red"),
  overlaying = "y",
  side = "right",
  title = "conducitivity",
  range = c(200,600)
)


plot_ly(
  font_conf,               #indicate the dataframe you're using
  x = ~datetime,         #identify x variable (keep the tilda)
  y = ~DO,           #identify y variable (keep the tilda)           
  text = ~site_sensor, 
  color = ~site_sensor, #when hovering over a bubble will display this var.
  type = "scatter",   #makes the plot a scatterplot
  mode = "markers",   #indicates values are points (e.g. not lines)
  marker = list(      #chooses properties of each bubble
    opacity = 0.8)) %>%   #the smaller opacity the more see the bubble
  # add_trace(font_conf, 
  #           x = ~datetime,         #identify x variable (keep the tilda)
  #           y = ~cond,           #identify y variable (keep the tilda)           
  #           text = ~site_sensor, 
  #           color = ~site_sensor, #when hovering over a bubble will display this var.
  #           type = "scatter",   #makes the plot a scatterplot
  #           mode = "markers",   #indicates values are points (e.g. not lines)
  #           marker = list(      #chooses properties of each bubble
  #             opacity = 0.8),
  #           yaxis = "y2",
  #           colorscale = "diverging") %>%
  layout(title = 'Dissolved oxygen (mg/L)', #names plot
         xaxis = list(showgrid = TRUE),       #makes x gridlines
         yaxis = list(showgrid = TRUE),
         yaxis2 = ay)       #makes y gridlines